home *** CD-ROM | disk | FTP | other *** search
- #include "apl2c_h.h"
-
- void main(void);
-
- void main (void)
- {
- unsigned int aplcs,left,right;
- int res,wsbarg[4];
- struct aplvhdr rarg,larg,result;
-
- aplcs = apl_cs();
- right = peek(aplcs,0x80);
- left = peek(aplcs,0x82);
-
- rarg.ptr = right; /* load segment value into $PTR field */
- apl_vhdr(&rarg); /* load up header info */
- larg.ptr = left;
- apl_vhdr(&larg);
-
- res = 1;
- if( (rarg.type != 1) || (rarg.rank != 1) || (rarg.dimens[0] != 4) )
- res = 0;
- if( (larg.type != 3) || (larg.rank != 2) )
- res = 0;
- if (res) /* if okay thus far */
- apl_vfdata(&rarg,(char far *)wsbarg); /* load data for final check */
- if( (larg.dimens[0] != wsbarg[2]) || (larg.dimens[1] != wsbarg[3]) )
- res = 0;
- if(res) /* if all okay, write to screen */
- wsb( MK_FP(larg.ptr,12),
- wsbarg[0],wsbarg[1],wsbarg[2],wsbarg[3]);
-
- svp_relm(rarg.ptr); /* release right arg stuff */
- svp_relm(larg.ptr); /* release left arg stuff */
-
- result.type = 1; /* res type = int */
- result.rank = 1; /* vector */
- result.nb = 16;
- result.nelm = 1;
- result.dimens[0] = 1; /* .. of length 1 */
- result.ptr = svp_getm(1); /* need only one par */
- poke(result.ptr,10,res); /* finally, put result into proper */
- /* location .. VHDR_APL ONLY loads */
- /* header info ... */
- vhdr_apl(&result); /* put hdr data where APL will find */
- poke(aplcs,0x80,result.ptr); /* result ptr to APL */
- poke(aplcs,0x82,0); /* 0 out left arg ptr */
-
- }
-
- /*
- WSB.C - write screen block
- */
-
-
- void wsb(bufr,srow,scol,nrows,ncols)
- char far * bufr;
- int srow,scol,nrows,ncols;
- {
- long vidoffset,rowstart,posn;
- int i,j;
- char mon_type;
-
- mon_type = *(char far *) 0x00400049;
- if(mon_type == 7) /* mono */
- vidoffset = 0xb0000000;
- else
- vidoffset = 0xb8000000;
-
- rowstart = vidoffset + srow * 160; /* row start for first */
- rowstart += 2 * scol; /* row of block */
- for(i = 0;i < nrows;i ++)
- { posn = rowstart;
- for(j = 0;j < ncols;j ++)
- { *(char far *)posn = *bufr++;
- posn += 2; /* next char */
- }
- rowstart += 160; /* next row */
- }
- }